home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm3.lha / UTILITY / StoneCrDecrunch.S < prev    next >
Text File  |  1995-03-03  |  3KB  |  207 lines

  1. ;-----------------------------------------------------------------------------
  2. ;- S404 highly optimized data decruncher v1.1 turbo
  3. ;- 27.11.93 by Marcus 'Cozine' Ottosson
  4. ;-----------------------------------------------------------------------------
  5. ;- Based on S404 data_decruncher v0.2
  6. ;- (c) 1993 by Jouni 'Mr.Spiv' Korhonen (SWSW)
  7. ;-----------------------------------------------------------------------------
  8. ;- chiamarla con:    a0 = indirizzo destinazione (dove scompattare)
  9. ;-            a1 = indirizzo dei dati compattati
  10. ;-----------------------------------------------------------------------------
  11.  
  12. ; usa i registri d0-a6, attenzione!
  13.  
  14.  
  15. decrunch:
  16. _l0:
  17.     addq    #8,a1            ; Skip ID string & security
  18.                     ; length..
  19.     move.l    a0,a5
  20.     add.l    (a1)+,a0
  21.     add.l    (a1),a1
  22.     moveq    #0,d4
  23.     moveq    #16,d5
  24.     movem.w    (a1),d2/d6/d7
  25.     not.w    d4
  26.     lea    _loff6(pc),a3
  27.     lea    _llen5a(pc),a4
  28.     moveq    #1,d0
  29.     moveq    #-1,d3
  30.     bra.s    _ltest1
  31.  
  32. _lins:
  33.     subq.w    #8,d7
  34.     bpl.s    _lins2
  35. _lins1:
  36.     move.w    d7,d1
  37.     addq.w    #8,d7
  38.     lsl.l    d7,d6
  39.     move.w    -(a1),d6
  40.     neg.w    d1
  41.     lsl.l    d1,d6
  42.     addq.w    #8,d7
  43.     swap    d6
  44.     move.b    d6,-(a0)
  45.     swap    d6
  46.     cmp.l    a0,a5
  47.     dbhs    d7,_lmain
  48.     bra.s    _lexma
  49.  
  50. _lins2:
  51.     rol.w    #8,d6
  52.     move.b    d6,-(a0)
  53. _ltest1:
  54.     cmp.l    a0,a5
  55.     dbhs    d7,_lmain
  56. _lexma
  57.     bhs.s    _lexit
  58.  
  59. _lmain1:
  60.     move.w    -(a1),d6
  61.     moveq    #15,d7
  62. _lmain:
  63.     add.w    d6,d6
  64.     bcc.s    _lins
  65.  
  66.     dbra    d7,_llen1
  67.     move.w    -(a1),d6
  68.     moveq    #15,d7
  69. _llen1:
  70.     add.w    d6,d6
  71.     bcs.s    _llen6
  72.     dbra    d7,_llen2
  73.     move.w    -(a1),d6
  74.     moveq    #15,d7
  75. _llen2:
  76.     moveq    #2,d1
  77.     moveq    #2,d3
  78.     add.w    d6,d6
  79.     bcs.s    _llen5
  80.     dbra    d7,_llen3
  81.     move.w    -(a1),d6
  82.     moveq    #15,d7
  83. _llen3:
  84.     add.w    d6,d6
  85.     bcc.s    _llen4
  86.     moveq    #4,d1
  87.     moveq    #6,d3
  88.     lea    _llen3a(pc),a6
  89.     bra.s    _lbits
  90. _llen3a:
  91.     add.w    d1,d3
  92.     cmp.w    #15,d1
  93.     blo.s    _loff1
  94.  
  95.     moveq    #5,d1
  96.     moveq    #14,d3
  97.     lea    _llen3b(pc),a6
  98.     bra.s    _lbits
  99.  
  100. _llen4:
  101.     moveq    #21,d3
  102. _lloop:
  103.     moveq    #8,d1
  104. _llen5:
  105.     move.l    a4,a6
  106.     bra.s    _lbits
  107. _llen5a:
  108.     add.w    d1,d3
  109.     not.b    d1
  110.     dbeq    d7,_loff2
  111.     bne.s    _loff2a    
  112.     beq.s    _lloop
  113.  
  114. _loff6:
  115.     add.w    d1,a2
  116.     move.b    (a2),-(a0)
  117. _lcopy:
  118.     move.b    -(a2),-(a0)
  119.     dbra    d3,_lcopy
  120. _ltest:
  121.     cmp.l    a0,a5
  122.     dbhs    d7,_lmain
  123.     blo.s    _lmain1
  124. _lexit:
  125.     rts
  126.  
  127. _llen6:
  128.     dbra    d7,_llen7
  129.     move.w    -(a1),d6
  130.     moveq    #15,d7
  131. _llen7:
  132.     add.w    d6,d6
  133.     addx.w    d0,d3
  134. _loff1:
  135.     dbra    d7,_loff2
  136. _loff2a:
  137.     move.w    -(a1),d6
  138.     moveq    #15,d7
  139. _loff2:
  140.     add.w    d6,d6
  141.     bcs.s    _loff3
  142.  
  143.     dbra    d7,_loff4
  144.     move.w    -(a1),d6
  145.     moveq    #15,d7
  146. _loff4:
  147.     moveq    #9,d1
  148.     lea    32(a0),a2
  149.     add.w    d6,d6
  150.     bcc.s    _loff5
  151.     moveq    #5,d1
  152.     move.l    a0,a2
  153.     bra.s    _loff5
  154. _loff3:
  155.     lea    544(a0),a2
  156.     move.w    d2,d1
  157. _loff5:
  158.     move.l    a3,a6
  159.  
  160. _lbits:
  161.     and.l    d4,d6
  162.     sub.w    d1,d7
  163.     bpl.s    _lbits2
  164.     add.w    d7,d1
  165.     lsl.l    d1,d6
  166.     move.w    d7,d1
  167.     move.w    -(a1),d6
  168.     neg.w    d1
  169.     add.w    d5,d7
  170. _lbits2:
  171.     lsl.l    d1,d6
  172.     move.l    d6,d1
  173.     swap.w    d1
  174.     jmp    (a6)
  175.  
  176. _lpins2:
  177.     moveq    #-1,d3
  178.     bra.w    _lins2
  179.  
  180. _l2ins2:
  181.     rol.w    #8,d6
  182.     move.b    d6,-(a0)
  183. _l2ins1:
  184.     lsl.l    d7,d6
  185.     move.w    -(a1),d6
  186.     lsl.l    d1,d6
  187.     swap    d6
  188.     move.b    d6,-(a0)
  189.     swap    d6
  190.     subq.w    #2,d3
  191.     bgt.s    _l2ins2
  192.     beq.s    _lpins2
  193.     addq.w    #8,d7
  194.     bra.s    _ltest
  195.  
  196. _llen3b:
  197.     add.w    d1,d3
  198.     move.b    _lnewd1(pc,d7),d1
  199.     bpl.s    _l2ins1
  200.     subq.w    #8,d7
  201.     dbra    d3,_l2ins2
  202.  
  203. _lnewd1:
  204.     dc.b    $08,$07,$06,$05,$04,$03,$02,$01
  205.     dc.b    $88,$87,$86,$85,$84,$83,$82,$81
  206.  
  207.